### 2021.03.21更新

两年前随便写的一个小脚本居然骗到100个星了，感觉十分惭愧对不起大家厚爱。
正好我现在弄另一个类似游戏的脚本，于是就结合了现用的脚本，重新封装整理出一个通用的框架。
目标是遇到相似的游戏时能10分钟内迅速写出一个能用脚本来。

还是一样包含桌面版和ADB版两个版本，分别用的明日方舟和阴阳师写了个例子。
主要目的是提供封装好的API供大家使用，所以例子写得比较简单只写了开始结束的自动点击和战斗中的判断。
剩下的比如体力不足、接受或拒绝组队之类的细节大家自行添加。

## 自动游戏挂机辅助
* 通用手游自动挂机脚本，解放双手，功能同阴阳师手游内自带的小纸人挂机系统类似，等于不受樱饼限制无限使用的小纸人~
* 拟人化的识图与模拟点击，不读取或修改游戏内部数据，只是取代手动操作。通过随机偏移点击位置和操作延迟防检测。
* 适用阴阳师、明日方舟、碧蓝航线等能自动战斗只要手动点开始结束的游戏。不适用王者荣耀等需要大量操作的游戏.

## 核心思路：
* 通过截屏和图片识别的方法判断当前游戏场景，找到需要点击的位置（用的opencv）
* 使用随机位置偏移与随机操作延迟防检测
* 桌面版本：电脑截屏，鼠标点击（用的pyautogui,可以用于电脑客户端或模拟器)
* ADB版本： 电脑向手机发送ADB命令截屏和点击（可以用连接真实手机或模板器）

## 使用说明：

wanted文件夹是要查找的目标图标，比如开始按键确认按键等截图保存到这里，文件后缀为.jpg。
screen文件夹是用来自动可在当前截屏的。
auto_player.py是主体文件，导入后就可以使用下面两个API。
example_adb_arknights.py是ADB模式的明日方舟脚本，明日方舟所有地图开始结束界面都一样，超简单。
example_desktop_YYS.py是桌面模式的阴阳师挂机脚本，只写了一个简单的单人御魂模式，供大家参考。

### find_touch(target, tap=True)。 
* 功能：截屏，查找target图标在截屏上的位置，并点击所在位置
* 传入参数target：string，查找的图标文件名，比如target='start'，则会查找wanted文件夹里的start.jpg图标所在位置并点击
* 传入参数tap：bool,是找到后是否点击，True是找到并点击。False是只查找不点击。因为这类游戏都是只要开始和结束时点击，中间有些图标是判断它正在自动战斗中的，不需要点击。
* 返回参数：找到了返回True, 未找到返回False

### find_touch_any(target_list, tap=True)。
* 功能：截屏，查找target_list列表图标在截屏上的位置，找到任意一个就会中断查找并点击所在位置。就是上面那个的批量处理版本，一次截屏查找多个目标。
* 传入参数target_list：string list，查找的图标文件名列表， 比如target=['start', 'end']， 则会查找wanted文件夹里的start.jpg图标和end.jpg图标所在位置，按顺序查找，只会点击最先找到的那个。
* 传入参数tap：同上
* 返回参数：找到了则返回找到的图标名称, 未找到返回None

### 代码示例：
    import auto_player as player
    
    #在当前屏幕寻找start.jpg图标的位置并点击
    player.find_touch("start") 
    
    #判断当前屏幕是否有start.jpg图标，只返回判断结果但不点击
    player.find_touch("start", tap=False) 
    
    #在当前屏幕寻找start.jpg图标或end.jpg，找到其中任意一个就会点击并返回
    player.find_touch_any(["start", "end"]) 
    
    #判断当前屏幕是否有start.jpg图标或end.jpg，只返回第一个找到的图标名，未找到则返回None
    player.find_touch_any(["start", "end"], tap=False) 
    
    #以上代码需要你先把开始按键、结算按键保存wanted文件夹并命名为start.jpg、end.jpg，否则会出现keyError错误
    

## 常见问题
* 注意文件路径不要有中文，否则会导致opencv读取图片失败，出现无法读取NoneType的Shape之类的错误
* 桌面版本是是截屏识别所以游戏窗口需要在前台不能被遮挡。
* 桌面版本如果找到了目标且鼠标移动了，却没有点击，大概率是权限问题。用管理员权限打开CMD来运行程序即可。
* ADB版本可以后台控制不怕遮挡，但是需要等手机截屏传输到电脑，传文件过程较慢且有极小概率出错卡死
* 果运行没有提示错误，但是一直匹配失败找不到，多半是图标精度问题，重新截取要找的图标
* ADB版本效率稍低但可以后台运行，不影响用电脑正常使用，我自己平常用的比较多。桌面版效率高，据反馈有概率被抓，可能是速度太快了或者游戏客户端带了检测。
* 脚本纯属爱好与分享，欢迎一起交流，但不提供售后服务

## 补充说明
这个原来来是专门写给阴阳师的，点赞的人应该也都是阴阳师玩家，所以针对阴阳师脚本的思路再做一点补充说明、
* 例子上写的是单人御魂， 组队跟单人其实是一样的，就再加一个点击接受组队。
* 御魂、业原火、觉醒这类地图都是一样的逻辑，就是界面和图标有的不一样，一直循环查找点击就好了。
* 探索麻烦一点，因为每个怪长得不一样。建议查找目标设置为怪头上那个交叉的剑的小图标，这个不会变。
* 探索进图后找那个交叉剑的攻击标识，找不到就拖动地图，拖动几次还找不到就退出重进，单刷大概就这样思路
* 组队探索最好是乘客位，不当司机，因为识别不了双倍经验BUFF怪。
有一个发表情的标识可以判断队长是否还在地图里，队长退了就跟着退厃重新接受组长
* 最最麻烦的百鬼夜行，动来动去超坑爹，我打算弄个机器学习给他们做人脸识别。
等哪天我做成功了就重新回坑把我那上千张百鬼票砸了。

